package com.foreknow.controller;

import com.foreknow.bean.User;
import com.foreknow.service.UserService;
import com.foreknow.service.impl.UserServiceImpl;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

/**
 * Servlet：服务器端的应用程序，主要用于处理客户端的请求
 * 1. 继承HTTPServlet (继承之前一定要将servlet-api.jar包放到lib文件夹中)
 * 2. 重写HttpServlet中的doGet/doPost方法
 * 3. HttpServletRequest req 请求对象(接口):它可以封装一些请求的信息(例如：请求的参数name="tom"&age=30&school="neu")
 * 4. HttpServletResponse resp 响应对象(接口): 它可以实现资源的跳转
 * 5. Servlet写完之后一定要到web.xml中配制
 * 6. 在游览器中输入url:  http://localhost:8087/UserManagerWeb/user/first     /user/first = url-pattern
 *
 * 面试：Servlet的生命周期
 * 1. Servlet 通过调用 init () 方法进行初始化（只调用一次）
 * 2. Servlet 调用 service() 方法来处理客户端的请求（每一次请求都要调用一次）。
 *       service() 方法会自动调用doGet或doPost。 程序员无需调用service()方法
 * 3. Servlet 通过调用 destroy() 方法终止（只调用一次）
 */
public class FirstServlet extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        //初始化的方法可以利用ServletConfig来获取配制文件web.xml中的数据（局部）
        //        int page = Integer.parseInt(config.getInitParameter("page"));
        //获取到全局的初始化参数
        int abc = Integer.parseInt(config.getServletContext().getInitParameter("abc"));
        System.out.println(abc);
    }

    //如何用户发送的语法是get请求，那么就会自动调用Servlet中的doGet（）方法
    //例如超链接默认的请求就是get请求 <a href="url">链接</a>
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务器向客户端响应的内容的类型（MIME）
        //        resp.setContentType("text/html;charset=utf-8");
        //        //向网页响应内容
        //        PrintWriter out = resp.getWriter();
        //        out.println("<html>");
        //        out.println("<head><title>servlet</title></head>");
        //        out.println("<body>");
        //        out.println(new Date());
        //        out.println("</body>");
        //        out.println("</html>");
    }

    //如何用户发送的语法是post请求，那么就会自动调用Servlet中的doPost（）方法
    //例如：表单可以通过method="get/post"来设置请求方式 <form method="post"></form>
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        //向网页响应内容
        PrintWriter out = resp.getWriter();
        //request对象中的其它方法测试
        //        out.println("获取请求方法的名称："+ req.getMethod());
        //        out.println("获取访问项目的Application Conext的名称："+ req.getContextPath());
        //        out.println("获取请求的URI地址："+ req.getRequestURL());

        //获取前端请求的参数 name="tom"&password=123456   java.lang.String getParameter(java.lang.String name)
        // <input type="text" id="inputEmail" name="username" class="form-control" placeholder="Email address" required autofocus>
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //调用Service中的登录方法
        UserService service = new UserServiceImpl();
        User user = service.isValidate(username,password);
        if(user!=null) {
            out.println("success......");
            out.println(username+"-----------------------"+password);
        }else {
            out.println("error......");
        }
    }
}
